home *** CD-ROM | disk | FTP | other *** search
- // Dynamic link library implementation of a logistic function input source
-
- #include "NSDLL.h"
-
- /***************************/
- /* Activation of component */
- __declspec(dllexport) void performInput(
- DLLData *instance, // Pointer to instance data (may be NULL)
- NSFloat *data, // Pointer to the data
- int rows, // Number of rows of data
- int cols // Number of cols of data
- )
- {
- NSFloat a = getFloatParameter(instance, 1, 1);
- NSFloat b = getFloatParameter(instance, 2, 1);
- NSFloat c = getFloatParameter(instance, 3, 1);
- NSFloat d = getFloatParameter(instance, 4, 1);
- NSFloat *lastResult = (NSFloat*)getUserData(instance);
- data[0] = (NSFloat)(sin(a*lastResult[1]) - lastResult[2]*cos(b*lastResult[0]));
- if (rows*cols > 1) {
- data[1] = (NSFloat)(lastResult[2]*sin(c*lastResult[0]) - cos(d*lastResult[1]));
- if (rows*cols > 2) {
- data[2] = (NSFloat)sin(lastResult[0]);
- lastResult[2] = data[2];
- }
- lastResult[1] = data[1];
- }
- lastResult[0] = data[0];
- }
-
- /******************************************/
- /* Called every time the network is reset */
- __declspec(dllexport) void networkReset(
- DLLData *instance // Pointer to instance data (may be NULL)
- )
- {
- NSFloat Xo = getFloatParameter(instance, 1, 2);
- NSFloat Yo = getFloatParameter(instance, 2, 2);
- NSFloat Zo = getFloatParameter(instance, 3, 2);
- NSFloat *lastData = (NSFloat*)getUserData(instance);
- lastData[0] = Xo;
- lastData[1] = Yo;
- lastData[2] = Zo;
- }
-
- /******************************************/
- /* Management of instance data (OPTIONAL) */
- __declspec(dllexport) DLLData *allocInput(
- DLLData *oldInstance, // Pointer to the last instance if reallocating
- int rows, // Number of rows of data
- int cols // Number of cols of data
- )
- {
- DLLData *instance = allocDLLInstance(oldInstance);
- setUserData(instance, calloc(3, sizeof(NSFloat)));
- setParameterName(instance, 1, 1, "a", FALSE);
- setFloatParameter(instance, 1, 1, 2.24f, FALSE);
- setParameterName(instance, 2, 1, "b", FALSE);
- setFloatParameter(instance, 2, 1, 0.43f, FALSE);
- setParameterName(instance, 3, 1, "c", FALSE);
- setFloatParameter(instance, 3, 1, -0.65f, FALSE);
- setParameterName(instance, 4, 1, "d", FALSE);
- setFloatParameter(instance, 4, 1, -2.43f, FALSE);
- setParameterName(instance, 1, 2, "Xo", FALSE);
- setFloatParameter(instance, 1, 2, 0.0f, FALSE);
- setParameterName(instance, 2, 2, "Yo", FALSE);
- setFloatParameter(instance, 2, 2, 0.0f, FALSE);
- setParameterName(instance, 3, 2, "Zo", FALSE);
- setFloatParameter(instance, 3, 2, 0.0f, FALSE);
- networkReset(instance);
- return instance;
- }
-
- __declspec(dllexport) void freeInput(DLLData *instance)
- {
- if (getUserData(instance))
- free(getUserData(instance));
- freeDLLInstance(instance);
- }
-